约 2342 字

约 12 分钟

#DSC 配置

本页介绍 Windows PowerShell DSC 中配置的编写、编译与应用流程。示例以 Windows PowerShell 5.1 为准。

#Configuration 块

Configuration 块是声明配置的入口,语法与函数类似,可以接收参数:

Demo.ps1

Configuration Demo {
    param(
        [string]$ComputerName = 'localhost'
    )

    Node $ComputerName {
        File SiteConfig {
            DestinationPath = 'C:\App\config.json'
            Contents        = '{"mode":"prod"}'
            Type            = 'File'
            Ensure          = 'Present'
        }
    }
}
  • Configuration 定义配置名称,调用时会把结果编译为 MOF。
  • param 块用于传入目标节点、路径等参数。
  • Node 指定目标节点,可以写主机名、localhost 或一个列表。
  • 块内只能使用 DSC 资源和少量控制语句。

#File

File 用于管理文件和目录:

File AppConfig {
    DestinationPath = 'C:\App\app.json'
    SourcePath      = '\\fileserver\share\app.json'
    Ensure          = 'Present'
}
  • Type 取 File 或 Directory。
  • Ensure 取 Present 或 Absent。
  • 使用 Contents 直接写入内容,使用 SourcePath 从源路径复制。

#Script

Script 用于封装无法用现成资源表达的逻辑,需要提供三个脚本块:

Script EnsureLogs {
    GetScript  = {
        @{ Result = (Test-Path 'C:\App\logs') }
    }
    TestScript = {
        Test-Path 'C:\App\logs'
    }
    SetScript  = {
        New-Item -ItemType Directory -Path 'C:\App\logs' -Force | Out-Null
    }
}
  • TestScript 返回 $true 表示已处于目标状态。
  • SetScript 只在 TestScript 返回 $false 时执行。

#编译为 MOF

定义配置后,调用配置名称即可编译。-OutputPath 指定输出目录,每个节点生成一个 .mof 文件:

> . .\Demo.ps1
> Demo -OutputPath .\out

#应用配置

使用 Start-DscConfiguration 把 MOF 推送到目标节点:

> Start-DscConfiguration -Path .\out -Wait -Verbose
  • -Wait 等待应用完成后再返回;省略时命令立即返回,需要查看作业状态。

#LCM 简介

本地配置管理器(Local Configuration Manager,LCM)是目标节点上负责执行配置的引擎。它读取 MOF、调用资源、检查状态,并按配置的周期重复应用。

运行 Get-DscLocalConfigurationManager 可以查看当前设置。LCM 的模式、刷新间隔、配置仓库等由元配置(meta configuration)设置,推模式下通常使用默认值即可。

#推荐阅读

更新: 2026/11/2

作者: planc

创建: 2026/11/2